package com.demo.java.OD151_200.OD183;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【GPU 调度】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145863538
 */
public class OdMain {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        // 读取GPU处理能力和任务数
        int n = Integer.parseInt(sc.nextLine());  // GPU每秒处理的最大任务数
        int m = Integer.parseInt(sc.nextLine());  // 任务的秒数

        // 读取每秒新增任务的数量
        int[] nums = Arrays.stream(sc.nextLine().split(" "))
                .mapToInt(Integer::parseInt)
                .toArray();

        // 表示每秒剩余待处理的任务数量
        int restTask = 0;

        // 遍历每秒的任务数量，逐步处理任务
        for (int num : nums) {
            // 当前秒新增的任务数量
            restTask += num;

            // 如果此时GPU的处理能力，大于剩余任务数量
            // 则直接处理掉当前的所有剩余任务
            if (n >= restTask) {
                restTask = 0;
            } else {
                // 否则，只能处理 n 个任务
                restTask -= n;
            }
        }

        // 至少需要经过 m 秒，才能处理完上述所有按时间新增的任务
        // 如果退出循环时，restTask 不为0
        // 则还需要 Math.ceil(restTask / n) 秒才能完成剩余任务
        int ans = m + (int) Math.ceil((double) restTask / n);

        // 输出结果
        System.out.println(ans);
    }
}